在 Python 裡,「模組」是一個存在於任意程式碼中的檔案,任何 Python 的程式碼也都可以當作模組使用,透過 import 陳述式,可以引用其他模組的程式碼,進一步使用其他模組的程式和變數,讓程式更精簡更好維護。
原文參考:匯入模組 import
本篇範例前半段 ( import、新增別名 ) 可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab ),後半段建議使用「本機 Python 環境」實作。
import 陳述式最簡單的用法就是「import 模組名稱
」,模組名稱是不包含 .py 的名稱,舉例來說,下方的程式碼匯入 datetime 模組,就能使用裡面 datetime 和 date 的方法,顯示目前的時間與日期 ( 其他頁面有更多標準函式庫的介紹 )。
import datetime
print(datetime.datetime.now()) # 2021-10-18 06:39:48.998396
print(datetime.date.today()) # 2021-10-18
此外,也可以使用「from 模組名稱 import 方法
」,單純匯入模組中的某一段程式,舉例來說,下方的程式碼只匯入了 date 方法。
from datetime import date
print(date.today()) # 2021-10-18
如果匯入的模組名稱和原本程式碼裡使用的相同,就必須修改其中一個的名稱 ( 修改模組或自己的程式 ),這時可以將模組使用「別名」的方式匯入,就不會更動到自己的程式,使用的方法為「import 模組 as 別名
」,舉例來說,下方的程式碼將匯入 datetime 模組使用「as」賦予 datetime 一個別名 dd,使用時只要呼叫 dd,就等同呼叫 datetime。
import datetime as dd
print(dd.datetime.now()) # 2021-10-18 06:39:48.998396
print(dd.date.today()) # 2021-10-18
每一支 Python 程式都可以作為模組,所以可以將共用的程式打包變成模組,再透過其他程式引用,舉例來說,下方有兩支 Python 程式,透過 main.py 匯入 ok.py,執行 ok.py 裡的 talk 函式。
ok.py
def talk(msg):
print(msg)
main.py
import ok
ok.talk('hi') # hi
如果自己的程式裡有多個函式或變數,也可以透過「from 模組名稱 import 方法
」單獨匯入,下方的程式只匯入了 count 函式和 name 變數。
ok.py
def talk(msg):
print(msg)
def count(x, y):
print(int(x)+int(y))
name = 'oxxo'
age = 18
main.py
from ok import count
from ok import name
count(1,2) # 3
print(name) # oxxo
Python 匯入模組的路徑,支援「絕對路徑」和「相對路徑」兩種,主要的寫法如下:
絕對路徑:以「目前檔案所在的資料夾」為根目錄
import a
from a import b
舉例來說,將 ok.py 放在與 main.py 同層的 module 的 test 資料夾裡,匯入時就必須要加上路徑「module.test」。
from module.test import ok
ok.count(1,2) # 3
print(ok.name) # oxxo
相對路徑:相對於「目前檔案所在的資料夾」的路徑,使用「.」作為區隔。
from . import a # 同一層目錄
from .. import a # 上一層目錄
from ... import a # 上上層目錄
from .a import b
使用相對路徑比較容易發生問題,常遇見的就是「attempted relative import with no known parent package」,原因出在執行時將執行的 .py 當作最底層,因此就發生找不到父元素 ( parent package ) 的狀況,參考 stackoverflow 的解法 ( 連結 1、連結 2 ),執行採用輸入指令的方式,輸入 python -m 目錄.檔名
,就可以正常執行。
大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我有個超過一千篇教學的 STEAM 教育學習網,有興趣可以參考下方連結呦~ ^_^